// 页面性能监控
const processData = (p) => {
  const data = {
    prevPage: p.fetchStart - p.navigationStart, // 上一个页面到这个页面的时长
    redirect: p.redirectEnd - p.redirectStart, // 重定向时长
    dns: p.domainLookupEnd - p.domainLookupStart, // DNS解析时长
    connect: p.connectEnd - p.connectStart, // TCP连接时长

    send: p.responseEnd - p.requestStart, // 请求总时长 响应结束到请求开始
    ttfb: p.responseStart - p.navigationStart, // 首字节时间
    domready: p.domInteractive - p.domLoading, // DOM准备时长
    whiteScreen: p.domLoading - p.navigationStart, // 白屏时长
    dom: p.domComplete - p.domLoading, // DOM解析时长
    load: p.loadEventEnd - p.loadEventStart, // 页面加载时长
    total: p.loadEventEnd - p.navigationStart, // 总时长
  };
  return data;
};

const load = (cb) => {
  let timer;
  const check = () => {
    if (performance.timing.loadEventEnd) {
      clearTimeout(timer);
      cb();
    } else {
      timer = setTimeout(check, 100);
    }
  };
  window.addEventListener("load", check, false);
};

const domready = (cb) => {
  let timer;
  const check = () => {
    if (performance.timing.domInteractive) {
      clearTimeout(timer);
      cb();
    } else {
      timer = setTimeout(check, 100);
    }
  };
  window.addEventListener("DOMContentLoaded", check, false);
};
export default {
  init(cb) {
    domready(() => {
      //有可能没触发onload事件 dom解析完成后也需要先统计下，可能用户没加载完就关闭了页面
      const p = performance.timing;
      const data = processData(p);
      data.type = "domready";
      cb(data);
    });
    load(() => {
      const p = performance.timing;
      const data = processData(p);
      data.type = "loaded";
      cb(data);
    });
  },
};
